package cmd

import (
	"fmt"
	"os"

	"BuildAll/internal/builder"
	"BuildAll/internal/platform"
	"BuildAll/internal/utils"

	"github.com/iwen-conf/colorprint/clr"
)

// Main 主函数
func Main() {
	// 解析命令行参数
	buildMode, targetOS, targetArch, helpMode, detailedReport := utils.ParseArgs()

	// 如果是帮助模式，显示帮助信息后退出
	if helpMode {
		utils.PrintHelp()
		return
	}

	// 如果不是构建模式，运行程序显示系统信息
	if !buildMode {
		utils.RunAsProgramInfo()
		return
	}

	// 获取项目名称
	projectName, err := utils.GetProjectName()
	if err != nil {
		fmt.Println(clr.FGColor("错误: "+err.Error(), clr.Red))
		os.Exit(1)
	}

	fmt.Println(clr.FGColor("项目名称: "+projectName, clr.Green))
	fmt.Println(clr.Bold("开始交叉编译平台组合..."))

	// 创建输出目录
	outputDir := "build"
	if err := os.MkdirAll(outputDir, 0755); err != nil {
		fmt.Println(clr.FGColor("创建输出目录失败: "+err.Error(), clr.Red))
		os.Exit(1)
	}

	// 计算需要构建的平台列表
	buildList := platform.GetBuildList(targetOS, targetArch)
	if len(buildList) == 0 {
		fmt.Println(clr.FGColor("没有找到要构建的平台组合，请检查过滤条件", clr.Yellow))
		return
	}

	fmt.Println(clr.FGColor(fmt.Sprintf("总共有 %d 个平台组合需要构建", len(buildList)), clr.Cyan))

	// 执行构建
	results := builder.BuildAllPlatforms(projectName, outputDir, buildList)

	// 打印结果摘要
	printSummary(results, outputDir)

	// 如果需要详细报告，打印详细报告
	if detailedReport {
		fmt.Println() // 空行
		fmt.Println(builder.GetDetailedReport(results))
	}
}

// 打印构建结果摘要
func printSummary(results builder.BuildResults, outputDir string) {
	fmt.Println() // 空行
	fmt.Println(clr.Bold(clr.FGColor("构建完成!", clr.Green)))
	fmt.Printf("%s: %s\n", clr.Bold("用时"), clr.FGColor(results.Duration.String(), clr.Magenta))

	// 成功信息
	successMsg := fmt.Sprintf("成功: %d", results.Successful)
	if results.Successful > 0 {
		fmt.Printf("%s: %s, ", clr.Bold("构建结果"), clr.FGColor(successMsg, clr.Green))
	} else {
		fmt.Printf("%s: %s, ", clr.Bold("构建结果"), successMsg)
	}

	// 失败信息
	failedMsg := fmt.Sprintf("失败: %d", results.Failed)
	if results.Failed > 0 {
		fmt.Printf("%s, ", clr.FGColor(failedMsg, clr.Red))
	} else {
		fmt.Printf("%s, ", failedMsg)
	}

	// 跳过信息
	skippedMsg := fmt.Sprintf("跳过: %d", results.Skipped)
	if results.Skipped > 0 {
		fmt.Printf("%s\n", clr.FGColor(skippedMsg, clr.Yellow))
	} else {
		fmt.Printf("%s\n", skippedMsg)
	}

	fmt.Printf("%s: %s\n", clr.Bold("生成的可执行文件位于"), clr.FGColor(outputDir, clr.Green))

	// 如果有失败的构建，给出提示
	if results.Failed > 0 {
		fmt.Println(clr.FGColor("\n使用 --detail 参数查看详细构建报告", clr.Yellow))
	}
}
